/****
 *
 * $Id: baracuda.h,v 1.14 2009/09/29 23:16:58 rdilley Exp $
 *
 * Copyright (c) 2009, Ron Dilley
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 
 *   - Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *   - Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in
 *     the documentation and/or other materials provided with the
 *     distribution.
 *   - Neither the name of Uberadmin/BaraCUDA/Nightingale nor the names of
 *     its contributors may be used to endorse or promote products derived
 *     from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 ****/

#ifndef BARACUDA_DOT_H
#define BARACUDA_DOT_H

/****
 *
 * includes
 *
 ****/

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <signal.h>
#include <pthread.h>
#include <sys/mman.h>
#include <unistd.h>

#include "md4.h" /* md4 code lifted from john (written by Solar Designer <solar at openwall.com> in 2001) */
#include "util.h"
#include "file.h"
#include "hash.h"
#include "mem.h"
#include "common.h"
#include "gpu_cuda.h"

/****
 *
 * defines
 *
 ****/

#define PROGNAME "nightingale"
#define VERSION "0.7"

#ifndef NTLM_HASH_LEN
# define NTLM_HASH_LEN 16
#endif

#define METRICS_INTERVAL 30

/* needs to be even */
#define MAX_COMPARE_THREADS 8

/****
 *
 * typedefs and structs
 *
 ****/

typedef struct {
  workUnit_t *workUnits;
  unsigned long count;
  unsigned long workUnitCount;
  unsigned long guessedCount;
  struct hash_s *uhHash;
  struct hashRec_s *hashRecPtr;
  int done;
  char tBuf[MAX_RBUF_LEN];
} threadWorkUnit_t;


/****
 *
 * function prototypes
 *
 ****/

int getCracking( void );
PRIVATE void print_version( void );
unsigned long loadBruteForceWorkUnits( workUnit_t *workUnits, unsigned long workUnitCount, int maxPwLen );
unsigned long processWorkUnits( workUnit_t *workUnits, unsigned long workUnitCount, uint32_t hashSize );
void threadCompareWorkUnits( void *threadId );
void sigint_handler( int signo );
void sighup_handler( int signo );
void sigterm_handler( int signo );
void sigfpe_handler( int signo );
void sigbus_handler( int signo );
void sigsegv_handler( int signo );
void sigill_handler( int signo );
void ctime_prog( int signo );
PRIVATE void print_help( char *progName );

#endif /* end of BARACUDA_DOT_H */
